/* USER CODE BEGIN Header */ /** ****************************************************************************** * @file : main.c * @brief : Main program body * @attention * *

© Copyright (c) 2019 STMicroelectronics. * All rights reserved.

* * This software component is licensed by ST under BSD 3-Clause license, * the License; You may not use this file except in compliance with the * License. You may obtain a copy of the License at: * www.st.com/SLA0044 * ****************************************************************************** */ /* USER CODE END Header */ /* Includes ------------------------------------------------------------------*/ #include "main.h" #include "adc.h" #include "usart.h" #include "i2c.h" #include "tim.h" #include "stm32f4xx_hal.h" #include "gpio.h" #include "stdio.h" /* Private variables ---------------------------------------------------------*/ /* Private variables ---------------------------------------------------------*/ #define VECT_TAB_OFFSET 0x10000 int tankstatus = 0; uint8_t zigbeecmd1[5]={0xFE,0x00,0x01,0x00,0x01}; uint8_t zigbeecmd2[5]={0xFE,0x00,0x02,0x00,0x02}; uint8_t zigbeestatu[20]; uint8_t zigbeestatu1[5]; uint8_t zigbeecon[7]="connect"; uint8_t zigbeenotcon[11]="not connect"; uint8_t zigbeechang[14]="change is down"; #define CLR_DS18B20() HAL_GPIO_WritePin (GPIOB, GPIO_PIN_0,GPIO_PIN_RESET ) #define SET_DS18B20() HAL_GPIO_WritePin (GPIOB, GPIO_PIN_0,GPIO_PIN_SET ) #define DS18B20_DQ_IN HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_0) int16_t temp; int error; float M14_DS18B20 =0; /* USER CODE BEGIN PV */ typedef void (*pFunction)(void); /* USER CODE END PV */ /* Private function prototypes -----------------------------------------------*/ void SystemClock_Config(void); void MX_ADC1_Init1(char pin); void sensor(void); uint8_t DS18B20_Init(void); short DS18B20_Get_Temp(void); void DS18B20_Start(void); void DS18B20_Write_Byte(uint8_t dat); uint8_t DS18B20_Read_Byte(void); uint8_t DS18B20_Read_Bit(void); uint8_t DS18B20_Check(void); void DS18B20_Rst(void); /* USER CODE BEGIN PFP */ /* USER CODE END PFP */ /* Private user code ---------------------------------------------------------*/ /* USER CODE BEGIN 0 */ int _write(int fd, char *ch, int len) { HAL_UART_Transmit(&huart4, (uint8_t*)ch, len, 0xFFFF); HAL_UART_Transmit(&huart2, (uint8_t*)ch, len, 0xFFFF); return len; } void print(char* s, float c) { int w; int w_d; int w_f; if(c<0) { w = c*100; w_d = w/100; w_f = (-1*w)%100; } else { w = c*100; w_d = w/100; w_f = w%100; } printf("%s = %d.%d\n",s,w_d,w_f); } /* USER CODE END 0 */ /** * @brief The application entry point. * @retval int */ int main(void) { SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_USART2_UART_Init(); MX_UART4_Init(); MX_USART1_UART_Init(); HAL_UART_Transmit(&huart2, (uint8_t *)zigbeecmd2, sizeof(zigbeecmd2), 10); HAL_Delay(1000); HAL_UART_Transmit(&huart2, (uint8_t *)zigbeecmd1, sizeof(zigbeecmd1), 10); HAL_UART_Receive(&huart2, (uint8_t *)zigbeestatu,sizeof(zigbeestatu),2000); HAL_UART_Transmit(&huart4, (uint8_t *)zigbeestatu, sizeof(zigbeestatu),10); if (zigbeestatu[18]== 0x01 || zigbeestatu[18]== 0x02) { HAL_UART_Transmit(&huart4, (uint8_t *)zigbeecon, sizeof(zigbeecon),10); } else if(zigbeestatu[18]== 0x05) { HAL_UART_Transmit(&huart4, (uint8_t *)zigbeenotcon, sizeof(zigbeenotcon),10); } while (1) { sensor(); if(M14_DS18B20<16) { HAL_GPIO_WritePin(GPIOA,GPIO_PIN_10, GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOA,GPIO_PIN_8, GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOD,GPIO_PIN_15, GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOD,GPIO_PIN_13, GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOD,GPIO_PIN_11, GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOB,GPIO_PIN_15, GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOE,GPIO_PIN_15, GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOE,GPIO_PIN_13, GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOE,GPIO_PIN_11, GPIO_PIN_RESET); } } } void SystemClock_Config(void) { RCC_OscInitTypeDef RCC_OscInitStruct = {0}; RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; __HAL_RCC_PWR_CLK_ENABLE(); __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; RCC_OscInitStruct.HSIState = RCC_HSI_ON; RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI; RCC_OscInitStruct.PLL.PLLM = 8; RCC_OscInitStruct.PLL.PLLN = 72; RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; RCC_OscInitStruct.PLL.PLLQ = 3; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { Error_Handler(); } RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) { Error_Handler(); } } void user_pwm_setvalue(uint16_t value) { TIM_OC_InitTypeDef sConfigOC; sConfigOC.OCMode = TIM_OCMODE_PWM1; sConfigOC.Pulse = value; sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1); HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1); } void user_pwm_setvalue2(uint16_t value) { TIM_OC_InitTypeDef sConfigOC; sConfigOC.OCMode = TIM_OCMODE_PWM1; sConfigOC.Pulse = value; sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_2); HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_2); } void sensor(void) { temp=DS18B20_Get_Temp(); HAL_Delay(10000); } void delay_us(uint32_t value) { uint32_t i; i = value * 3; while(i--); } void DS18B20_Rst(void) { CLR_DS18B20(); delay_us(750); SET_DS18B20(); delay_us(15); } uint8_t DS18B20_Check(void) { uint8_t retry=0; while (DS18B20_DQ_IN&&retry<200) { retry++; delay_us(1); } if(retry>=200)return 1; else retry=0; while (!DS18B20_DQ_IN&&retry<240) { retry++; delay_us(1); } if(retry>=240)return 1; return 0; } uint8_t DS18B20_Read_Bit(void) { uint8_t data; CLR_DS18B20(); delay_us(2); SET_DS18B20(); delay_us(12); if(DS18B20_DQ_IN)data=1; else data=0; delay_us(50); return data; } uint8_t DS18B20_Read_Byte(void) { uint8_t i,j,dat; dat=0; for (i=1;i<=8;i++) { j=DS18B20_Read_Bit(); dat=(j<<7)|(dat>>1); } return dat; } void DS18B20_Write_Byte(uint8_t dat) { uint8_t j; uint8_t testb; for (j=1;j<=8;j++) { testb=dat&0x01; dat=dat>>1; if (testb) { CLR_DS18B20(); delay_us(2); SET_DS18B20(); delay_us(60); } else { CLR_DS18B20(); delay_us(60); SET_DS18B20(); delay_us(2); } } } uint8_t DS18B20_Init(void) { SET_DS18B20(); DS18B20_Rst(); return DS18B20_Check(); } void DS18B20_Start(void) { DS18B20_Rst(); DS18B20_Check(); DS18B20_Write_Byte(0xcc); DS18B20_Write_Byte(0x44); } short DS18B20_Get_Temp(void) { uint8_t temp; uint8_t TL,TH; short tem; DS18B20_Start(); DS18B20_Rst(); DS18B20_Check(); DS18B20_Write_Byte(0xcc); DS18B20_Write_Byte(0xbe); TL=DS18B20_Read_Byte(); TH=DS18B20_Read_Byte(); if(TH>7) { TH=~TH; TL=~TL; temp=0; } else temp=1; tem=TH; tem<<=8; tem+=TL; tem=(float)tem*0.625f; if(temp)return tem; else return -tem; } void MX_ADC1_Init1(char pin) { ADC_ChannelConfTypeDef sConfig = {0}; hadc1.Instance = ADC1; hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV2; hadc1.Init.Resolution = ADC_RESOLUTION_12B; hadc1.Init.ScanConvMode = DISABLE; hadc1.Init.ContinuousConvMode = DISABLE; hadc1.Init.DiscontinuousConvMode = DISABLE; hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE; hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; hadc1.Init.NbrOfConversion = 1; hadc1.Init.DMAContinuousRequests = DISABLE; hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV; if (HAL_ADC_Init(&hadc1) != HAL_OK) { Error_Handler(); } sConfig.Channel = pin; sConfig.Rank = 1; sConfig.SamplingTime = ADC_SAMPLETIME_3CYCLES; if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) { Error_Handler(); } } void MX_GPIO_Input1(unsigned long pin) { GPIO_InitTypeDef GPIO_InitStruct = {0}; __HAL_RCC_GPIOE_CLK_ENABLE(); GPIO_InitStruct.Pin = pin; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_PULLDOWN; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); } void Error_Handler(void) { }